// Source : https://leetcode.com/problems/unique-email-addresses
// Author : Dean Shi
// Date   : 2018-11-10

/***************************************************************************************
 *
 * Every email consists of a local name and a domain name, separated by the @ sign.
 *
 * For example, in alice@leetcode.com, alice is the local name, and leetcode.com is the
 * domain name.
 *
 * Besides lowercase letters, these emails may contain '.'s or '+'s.
 *
 * If you add periods ('.') between some characters in the local name part of an email
 * address, mail sent there will be forwarded to the same address without dots in the
 * local name.  For example, "alice.z@leetcode.com" and "alicez@leetcode.com" forward
 * to the same email address.  (Note that this rule does not apply for domain names.)
 *
 * If you add a plus ('+') in the local name, everything after the first plus sign will
 * be ignored. This allows certain emails to be filtered, for example m.y+name@email.
 * com will be forwarded to my@email.com.  (Again, this rule does not apply for domain
 * names.)
 *
 * It is possible to use both of these rules at the same time.
 *
 * Given a list of emails, we send one email to each address in the list.  How many
 * different addresses actually receive mails?
 *
 * Example 1:
 *
 * Input: ["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","
 * testemail+david@lee.tcode.com"]
 * Output: 2
 * Explanation: "testemail@leetcode.com" and "testemail@lee.tcode.com" actually receive
 * mails
 *
 * Note:
 *
 * 1 <= emails[i].length <= 100
 * 1 <= emails.length <= 100
 * Each emails[i] contains exactly one '@' character.
 *
 *
 ***************************************************************************************/

/**
 * @param {string[]} emails
 * @return {number}
 */
var numUniqueEmails = function(emails) {
    return new Set(emails.map(parseEmail)).size
};

function parseEmail(email) {
    let parsedEmail = ''
    let [address, hostname] = email.split('@')

    for (let a of address) {
        if (a === '.') continue
        if (a === '+') break
        parsedEmail += a
    }

    return `${parsedEmail}@${hostname}`
}
